package it.unipd.dei.bd.icineasti.servlet;

import it.unipd.dei.bd.icineasti.database.GetFilmFromSedeDatabase;
import it.unipd.dei.bd.icineasti.database.ElencaDataOraConCondizioneDatabase;
import it.unipd.dei.bd.icineasti.database.GetAllFilmDatabase;
import it.unipd.dei.bd.icineasti.resource.Film;
import it.unipd.dei.bd.icineasti.resource.Palinsesto;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Date;
import java.util.List;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

/**
 * Servlet per il caricamento dei film nella rispettiva pagina di programmazione
 * Necessita del parametro d'ingresso codiceSede, per convenzione -1 = tutte le sedi
 * 
 * @author Morris Antonello
 *
 */
public class GetProgrammazioneServlet extends AbstractDatabaseServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {

		// imposta il tipo MIME della risposta
		res.setContentType("text/html");

		// ottiene un flusso di uscita per scrivere la risposta
		PrintWriter out = res.getWriter();

		Connection con = null;

		try {
			
			con = DS.getConnection();
			
			Date dataOra = new Date(System.currentTimeMillis());
			
			List<Film> film = null;
			
			int codiceSede = Integer.parseInt(req.getParameter("codiceSede"));
			
			if (codiceSede < 0)
				film = new GetAllFilmDatabase(con, dataOra).getFilmFromSede();
			else
				film = new GetFilmFromSedeDatabase(con, codiceSede, dataOra).getFilmFromSede();
			
			int i = 0;
			List<Palinsesto> palinsesti = null;
			String dateore = "";
			
			for (Film f : film) {
				if (codiceSede != -1) {
					con = DS.getConnection();
					palinsesti = new ElencaDataOraConCondizioneDatabase(con, codiceSede, f.getCodice()).elencaPalinsesti();
					int j = 0;
					for (Palinsesto p : palinsesti) {
						if (j < palinsesti.size() - 1) {
							dateore += p.getDataOra() + ", ";
						} else {
							dateore += p.getDataOra();
						}	
						j++;
					}
				}
				
				String output="";
				
				output += "<div id=\"" + f.getCodice() + "\" class=\"evento\">" +
								
								"<table class=\"dettagli\">"+
									"<tr><td class=\"titolo\">" + f.getTitolo() + "</td></tr>" +
									"<tr><td class=\"genere\">Genere: " + f.getGenere() + "</td></tr>" +
									"<tr><td class=\"regia\">Regia: " + f.getRegia() + "</td></tr>" +
									"<tr><td class=\"durata\">Durata: " + f.getDurataInSala() + " min </td></tr>";
				if (codiceSede != -1)
					output += 		"<tr><td class=\"giorniorari\">Programmazione: " + dateore.substring(0, 16) + " </td></tr>"; // esempio 2013-09-01 20:30:00.0 
				
				output += 			"<tr>" +
										"<td class=\"codiceEvento\">"+
											"<a href=\"scheda_film.jsp?codiceEvento="+f.getCodice()+"\" >Scheda film...</a>" +
										"</td>" +
									"</tr>"+
									"<tr><td class=\"acquistaoprenota\"><a href=\"prenotazione.jsp\">ACQUISTA/PRENOTA SUBITO!</a></td></tr>" +
								"</table>" +
								"<img class=\"locandina\" src=\"../image?id=" + f.getCodice() + "\" alt=\"Locandina " + f.getTitolo() + "\"/>" +
							"</div>";
				
				out.println(output);
				
				dateore = "";
			}

		} catch (NullPointerException e) {
			out.printf("<p><font color=\"red\" size=\"+2\">Impossibile creare la connessione al database.</font></p>");
		} catch (SQLException e) {
			out.printf("<p><font color=\"red\" size=\"+2\">Errore durante l'accesso al database: %s</font></p>",
			e.getMessage());
		}


		out.flush();
		out.close();

	}

}
